﻿// HSS.Interlink.UI.IUploadConfiguration.cs
// ----------------------------------------------------------------------------
// Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.html)
// ----------------------------------------------------------------------------
// HighSpeed-Solutions, LLC
// Copyright (c) 2001-2012
// ----------------------------------------------------------------------------
// File:       IUploadConfiguration.cs
// Author:     HSS\gbanta
// Created:    01/17/2012
// Modified:   01/17/2012
// ----------------------------------------------------------------------------
namespace HSS.Interlink.UI
{
	#region IUploadConfiguration
	/// <summary>
	/// An Interface that defines the configuration for an upload.
	/// </summary>
	public interface IUploadConfiguration
	{
		/// <summary>
		/// Gets or sets whether or not to overwrite existing files.
		/// </summary>
		bool AllowFileOverwrite { get; set; }
		/// <summary>
		/// Gets or sets whether or not the user can select multiple files.
		/// </summary>
		[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Multi")]
		bool AllowMultiSelect { get; set; }
		/// <summary>
		/// Gets or sets whether or not once the first upload process completes, if the User can initiate a new upload.
		/// </summary>
		bool AllowNewUpload { get; set; }
		/// <summary>
		/// Gets or sets whether or not to begin uploading immediately after file selection.
		/// </summary>
		bool AutoUpload { get; set; }
		/// <summary>
		/// Gets or sets the configuration string to provide to the configurated <see cref="IUploadClient"/> client during intialization.
		/// </summary>
		string ClientConfig { get; set; }
		/// <summary>
		/// Gets or sets a string defining the Type of the <see cref="IUploadClient"/> that will process the upload for a single file.
		/// </summary>
		string ClientType { get; set; }
		/// <summary>
		/// Gets or sets a comment for display.
		/// </summary>
		string Comment { get; set; }
		/// <summary>
		/// Gets or sets the pipe delimited list of file extensions that are prohibited. Example: .exe|.mdb
		/// </summary>
		string ExcludeFileExtension { get; set; }
		/// <summary>
		/// Gets or sets a pipe delimeted string of allowed file extensions that can be uploaded.
		/// </summary>
		string Filters { get; set; }
		/// <summary>
		/// Gets or sets the maximum number of concurrent files that can be uploaded at a time.
		/// </summary>
		int MaximumConcurrency { get; set; }
		/// <summary>
		/// Gets or sets the maximum size, in bytes, of any one file that can be uploaded.
		/// </summary>
		int MaximumFileSize { get; set; }
		/// <summary>
		/// Gets or sets the text to be displayed when there are no files to upload.
		/// </summary>
		string NoFilesText { get; set; }
		/// <summary>
		/// Gets or sets the uri of a remote service to receive the file(s).
		/// </summary>
		[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings")]
		string ServiceUri { get; set; }
		/// <summary>
		/// Gets or sets a title for display.
		/// </summary>
		string Title { get; set; }
		/// <summary>
		/// Gets or sets the Uri of a <see cref="System.Windows.DataTemplate"/> resource to load that supports the Type defined in the <see cref="UploadFileType"/> property.
		/// </summary>
		string UploadFileDataTemplate { get; set; }
		/// <summary>
		/// Gets or sets the fully qualified name of the <see cref="System.Type"/> of the model that should contain an individual file for upload.
		/// </summary>
		/// <remarks>
		/// <para>
		/// This property is used to resolve the desired model which
		/// can be the default of <see cref="UploadFile"/>, or a derived
		/// type allowing a control developer to extend the 
		/// <see cref="UploadFile"/> model.
		/// </para>
		/// </remarks>
		string UploadFileType { get; set; }
	}
	#endregion
}